import type { App } from "vue-demi";
import { createApp } from "vue-demi";
import View from "./views/index.vue";

export interface Config {
	hideCtrl: boolean; // 是否默认隐藏mock控制台
	openMockRecord: boolean; // 是否默认开启mock记录
	openMockMode: boolean; // 是否默认开启mock模式 ** 记录与模式只能开启一个 **
	dbKey: string; // localStorage/indexedDB 的 key
	btnDbKey: string; // 存储在 localStorage 的用于存储按钮开启关闭状态的 key
	elementId: string; // 挂载节点 id，主动设置避免 id 重复
	mode: 'localStorage' | 'indexedDB' // 存储模式
	indexedDBName: string, // 数据库的名字
}

const defaultConfig: Config = {
	hideCtrl: false, // 是否默认隐藏控制台
	openMockRecord: false, // 是否默认开启 mock 记录
	openMockMode: false, // 是否默认开启 mock 模拟模式
	dbKey: 'v__mock',
	btnDbKey: 'v__mock__btn',
	elementId: 'v_mock',
	mode: 'localStorage',
	indexedDBName: 'v__mock',
}

export default function VMock(config: Partial<Config> = {}) {
	return {
		install(app: App) {
			const allConfig = { ...defaultConfig, ...config }
			if (allConfig.openMockMode && allConfig.openMockRecord) {
				throw new Error('mock记录与mock模式只能开启一个')
			}
		    const node = document.createElement('div')
		    node.id = allConfig.elementId as string;
		    document.body.appendChild(node)
			const mockApp = createApp(View)
			mockApp.provide('config', allConfig)
			mockApp.mount('#v_mock')
		}
	}
}